using System.Collections.Generic;
using MLSharp;
using MLSharp.Evaluation;
using MLSharp.Filters;

namespace MLSharp.ConsoleRunner
{
	/// <summary>
	/// Defines the interface for test harnesses.
	/// </summary>
	public interface IHarness
	{
		/// <summary>
		/// Flag that indicates whether or not the harness should attempt
		/// to parallelize classifier execution.
		/// </summary>
		bool RunInParallel { get; set; }

		/// <summary>
		/// The result writers to write output data to.
		/// </summary>
		IList<IResultWriter> ResultWriters { get; }

		/// <summary>
		/// The filters to apply to the dataset.
		/// </summary>
		IList<IDataSetFilter> Filters { get; }

		/// <summary>
		/// Runs the harness.
		/// </summary>
		/// <param name="dataSet">The data set to use.</param>
		void Run(IDataSet dataSet);
	}
}